# 按字节计算CRC16
def crc16(data):
    crc = 0xFFFF
    for byte in data:
        crc ^= byte
        for _ in range(8):
            if crc & 0x0001:
                crc = (crc >> 1) ^ 0xA001
            else:
                crc = crc >> 1
    return crc

# IEEE 754 浮点数转换
def ieee754_to_float(data):
    """
    将4字节的小端序IEEE 754格式数据转换为浮点数
    
    参数:
        data: 包含4个字节的列表，按小端序排列
    
    返回:
        对应的浮点数值
    """
    import struct
    # 将字节列表转换为字节字符串
    bytes_data = bytes(data)
    # 使用struct模块解析小端序的IEEE 754浮点数
    # 'f'代表32位浮点数，'<'代表小端序
    return struct.unpack('>f', bytes_data)[0]

if __name__ == '__main__':
    data = [0x0C, 0x03, 0x00, 0x00, 0x00, 0x08]
    crc = crc16(data)
    # 将计算后的数值添加至数据列表中
    data.append(crc & 0xFF)
    data.append(crc >> 8)
    # 将数据表中的参数以十六进制形式输出
    for byte in data:
        print(hex(byte), end=' ')

    # 换行
    print()
    print(hex(crc))

    # 浮点数转换
    data = [0x00, 0x00, 0x43, 0xFA] # 小端序数据示例 500.0
    # 注意：数据应为4个字节，符合IEEE 754格式
    float_value = ieee754_to_float(data)
    # 将浮点数转换为字符串并输出
    float_str = str(float_value)
    print(float_str)
    # 也可以使用格式化字符串控制精度
    print(f"{float_value:.2f}")  # 保留两位小数